package com.hm.ibsm.manage.service;

import java.util.List;

import com.hm.common.def.MobileDevicesDef;
import com.hm.ibsm.manage.uti.ManageShareDef;
import com.hm.ibsm.manage.vo.auth.AuthUserTokenVo;
import com.hm.ibsm.manage.vo.auth.AuthUserVo;
import com.hm.ibsm.manage.vo.auth.RoleMenuVo;
import com.hm.ibsm.manage.vo.auth.UserAuthTokenVo;
import com.hm.ibsm.manage.vo.auth.UserMenuVo;
import com.hm.ibsm.manage.vo.auth.UserRoleVo;
import com.hm.ibsm.manage.vo.user.UserDetailVo;

/**
 * @author shishun.wang
 * @date 2017年2月8日 下午5:44:22
 * @version 1.0
 * @describe
 */
public interface AuthService {

	public String HTTP_INVOKER_EXPORT_CONTEXT = "/HttpInvokerEndpoing/manage/AuthService/" + ManageShareDef.HttpInvokerEndpoing.VERSION;

	/**
	 * 通过账户+密码登陆
	 * 
	 * @param account
	 * @param pwd
	 * @param devices
	 * @param clientIp
	 * @return
	 */
	public AuthUserVo loginByAccountPwd(String account, String pwd, MobileDevicesDef devices, String clientIp);

	/**
	 * 通过账户+私钥
	 * 
	 * @param account
	 * @param privateKey
	 * @return
	 */
	public UserDetailVo loginByAccountPubKey(String account, String privateKey);

	/**
	 * 通过邮箱地址+密码登陆
	 * 
	 * @param email
	 * @param pwd
	 * @param devices
	 * @param clientIp
	 * @return
	 */
	public AuthUserVo loginByEmailPwd(String email, String pwd, MobileDevicesDef devices, String clientIp);

	/**
	 * 通过邮箱地址+私钥
	 * 
	 * @param email
	 * @param privateKey
	 * @return
	 */
	public UserDetailVo loginByEmailPubKey(String email, String privateKey);

	/**
	 * 通过手机号码+密码登陆
	 * 
	 * @param mobile
	 * @param pwd
	 * @param devices
	 * @param clientIp
	 * @return
	 */
	public AuthUserVo loginByMobilePwd(String mobile, String pwd, MobileDevicesDef devices, String clientIp);

	/**
	 * 通过手机号码+私钥
	 * 
	 * @param mobile
	 * @param privateKey
	 * @return
	 */
	public UserDetailVo loginByMobilePubKey(String mobile, String privateKey);

	/**
	 * 设置用户角色
	 * 
	 * @param userId
	 * @param roles
	 * @return
	 */
	public boolean setUserRoles(String userId, List<String> roles);

	/**
	 * 获取用户角色
	 * 
	 * @param userId
	 * @return
	 */
	public List<UserRoleVo> getUserRoles(String userId);

	/**
	 * 设置角色菜单
	 * 
	 * @param roleId
	 * @param menus
	 * @return
	 */
	public boolean setRoleMenus(String roleId, List<String> menus);

	/**
	 * 获取角色菜单
	 * 
	 * @param roleId
	 * @return
	 */
	public List<RoleMenuVo> getRoleMenus(String roleId);

	/**
	 * 获取授权用户Token信息
	 * 
	 * @param tokenId
	 * @return
	 */
	public UserAuthTokenVo getUserAuthTokenInfo(String tokenId);

	/**
	 * 获取当前登录授权用户ID
	 * 
	 * @param tokenId
	 * @param secretKey
	 * @return
	 */
	public String loadCurrentUserId(String tokenId, String secretKey);

	/**
	 * 检查当前登录授权用户是否合法
	 * 
	 * @param tokenId
	 * @param secretKey
	 * @return
	 */
	public boolean checkUserAuthTokenInfo(String tokenId, String secretKey);

	/**
	 * 刷新授权用户Token信息
	 * 
	 * @param tokenId
	 * @param secretKey
	 * @param ip
	 * @return
	 */
	public AuthUserTokenVo refreshUserAuthTokenInfo(String tokenId, String secretKey, String ip);

	/**
	 * 注销用户
	 * 
	 * @param tokenId
	 * @param secretKey
	 * @return
	 */
	public boolean logout(String tokenId, String secretKey);

	/**
	 * 加载用户菜单列表
	 * 
	 * @param userId
	 * @return
	 */
	public List<UserMenuVo> loadUserMenus(String userId);

}
